package java.lang;

/**
 * 双亲委派机制
 * 当一个类加载器收到了类加载请求，他首先不会尝试自己去加载这个类，而是把这个请求委派给父类去完成，每一个层次类加载器都是如此。
 * 因此所有的加载请求都应该传送到启动类加载器中，只有当父类加载器反馈自己无法完成这个请求的时候（在它的加载路径下没有找到所需加载的Class），
 * 子类加载器才会尝试自己去加载。
 *
 * 类加载器加载类的顺序：首先启动类加载器bootstrap加载这个类，如果没有找到，拓展类加载器去加载，如果还没有，应用类加载器 -> 自定义加载器，如果还没有找到，报class not found
 *
 *
 * 采用双亲委派的一个好处是比如加载位于 rt.jar 包中的类 java.lang.Object，不管是哪个加载器加载这个类，最终都是委托给顶层的启动类加载器进行加载，
 * 这样就保证了使用不同的类加载器最终得到的都是同样一个 Object对象。保证不污染java 源代码，即沙箱安全。
 */

/**
 * 测试时候，请将String2改为String
 */
public class String2 {
    // 错误: 在类 java.lang.String 中找不到 main 方法。这是因为双亲委派机制，会从bootstrap开始加载这个类，而bootstrap能够找到这个类，发现没有main，所以报错
    public static void main(String[] args) {
        System.out.println("--hello");
    }
}
